package cn.south.campus.business.service;

import cn.south.campus.business.model.entity.GoodsOrder;
import cn.south.campus.business.model.req.GoodsOrderCreateReq;
import cn.south.campus.business.model.req.GoodsOrderQueryReq;
import cn.south.campus.business.model.vo.GoodsOrderVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author chow
 * @since 2024-11-14
 */
public interface GoodsOrderService extends IService<GoodsOrder> {

    /**
     * 分页查询订单
     *
     * @param req 查询参数
     * @return 分页结果
     */
    IPage<GoodsOrderVo> pageBuyer(GoodsOrderQueryReq req);

    /**
     * 分页查询订单
     *
     * @param req 查询参数
     * @return 分页结果
     */
    IPage<GoodsOrderVo> pageSeller(GoodsOrderQueryReq req);

    /**
     * 查询订单详情
     *
     * @param orderNo orderNo
     * @return 订单
     */
    GoodsOrderVo getSellerOrderDetail(String orderNo);

    /**
     * 查询订单详情
     *
     * @param orderNo orderNo
     * @return 订单
     */
    GoodsOrderVo getBuyerOrderDetail(String orderNo);

    /**
     * 创建订单
     *
     * @param req 订单请求
     */
    String createOrder(GoodsOrderCreateReq req);

    /**
     * 取消订单
     *
     * @param orderNo 订单号
     */
    void cancelOrder(String orderNo);

    /**
     * 支付订单
     *
     * @param orderNo   订单号
     * @param payMethod 支付类型
     */
    void payOrder(String orderNo, String payMethod);

    /**
     * 确认交货
     *
     * @param orderNo 订单号
     */
    void confirmDeliver(String orderNo);

    /**
     * 确认收货
     *
     * @param orderNo 订单号
     */
    void confirmOrder(String orderNo);

    /**
     * 申请退款
     *
     * @param orderNo 订单号
     */
    void applyRefund(String orderNo);

    /**
     * 取消退款
     *
     * @param orderNo 订单号
     */
    void cancelRefund(String orderNo);

    /**
     * 退款
     *
     * @param orderNo 订单号
     */
    void refundOrder(String orderNo);

    /**
     * 删除订单
     *
     * @param orderNo 订单号
     */
    void deleteOrder(String orderNo);
    /**
     * 删除订单
     *
     * @param orderNo 订单号
     */
    void deleteMeOrder(String orderNo);
}
